<!DOCTYPE html>
<html lang="zh-CN">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>字符类</title>
	</head>
	<body>
		<script>
			// \d 对应于“任何一位数字（0~9）”。
			let str = '+7(903)-123-45-67'
			let regexp1 = /\d/
			let regexp2 = /\d/g
			console.log(str.match(regexp1).toString()) // 7 如果没有修饰符 g，则正则表达式仅查找第一个匹配项，即第一个数字 \d
			console.log(str.match(regexp2).toString()) // 7,9,0,3,1,2,3,4,5,6,7 匹配所有数字

			// \s 匹配 空白字符：空格、空制表符：\t 换行符：\n 回车符：\r 垂直制表符： \v 换页符：\f）
			let str1 = '1 a'
			console.log(str1.match(/\d\s\w/).toString()) // 1 a

			// \w 匹配 拉丁字母或数字或下划线 _
			let str2 = '2_b'
			console.log(str2.match(/\d\w\w/).toString()) // 2_b
		</script>

		<script>
			let str5 = 'Is CSS4 CSS5'
			let reg = /CSS\d/g
			console.log(str5.match(reg)) // ['CSS4', 'CSS5']
		</script>

		<script>
			// 【反向类】

			// 对于每个字符类，都有一个“反向类”，用相同的字母表示，但是大写的。

			// \D
			// 非数字：除 \d 以外的任何字符，例如字母。

			// \S
			// 非空格符号：除 \s 以外的任何字符，例如字母。

			// \W
			// 非单字字符：除 \w 以外的任何字符，例如非拉丁字母或空格。
		</script>

		<script>
			// 【点（.）匹配“任何字符”】

			// 点 . 是一种特殊字符类，它与“除换行符之外的任何字符”匹配。点表示“任何字符”。

			let reg2 = /Z.z/

			console.log('Z z'.match(reg2).toString()) // Z z
			console.log('Z-z'.match(reg2).toString()) // Z-z
			console.log('Z_z'.match(reg2).toString()) // Z_z
			console.log('Z.z'.match(reg2).toString()) // Z.z
			console.log('Zz'.match(reg2)) // null（没有匹配 . 表示任何字符，而不是缺少字符）

			// 带有修饰符 "s" 时点字符类匹配任何字符（包括换行符 \n）
			console.log('A\nB'.match(/A.B/)) // null
			console.log('A\nB'.match(/A.B/s)) // [A\nB]
		</script>

		<script>
			// 注意空格

			// 一个空格是一个字符。与其他字符同等重要。
		</script>
	</body>
</html>
